package com.cskaoyan.javase.oop1._11static._3usecase;

/**
 * static关键字有什么具体的使用场景呢？
 * 这里，根据static关键字的一些特点来明确它的使用场景
 * 给大家以后使用static关键字做一下参考。
 *
 * 静态成员变量：
 *      1.属于全体对象所共享而不是独属于某个对象的成员变量
 *          所以当存在需要所有对象共享的变量时，应该使用static修饰的静态成员变量。
 *      2.在整个类全局独一份的（因为类加载只有一次）
 *          所以，如果希望某个变量在类的全局独一份时，应该使用static修饰的静态成员变量。
 *          实际上,很多时候,以上两个需求都会用到.
 *
 *
 *
 * @since 15:52
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        /*Student s = new Student();
        Student s2 = new Student();
        System.out.println(Student.count);
        for (int i = 0; i < 5; i++) {
            Student s3 = new Student();
        }
        System.out.println(Student.count);*/
        for (int i = 0; i < 10; i++) {
            Student s = new Student();
            System.out.println("第" + (i + 1) + "次创建Student对象,他的id是" + s.id);
        }
    }
}

class Student {
    /*
        需求1:
        现在Student类只有一个无参构造器
        要求统计在外界new对象的次数
        怎么办呢?
        统计次数,需要计数器,需要一个int count变量
        那么这个count变量是一个什么变量?
        count能够统计new对象的次数,那么它应该不受创建对象影响
        在整个类的全局独一份,而且要被全体对象共享
        这就是静态成员变量
     */
    static int count = 0;
    int id;

    /*
        需求2:
        现在要求给每个Student对象,添加一个唯一性的标识id
        id肯定是成员变量
        在给id赋值时,要求:
            第一次创建的Student对象id是10001
            第二次创建的Student对象id是10002
            第三次创建的Student对象id是10003
            ...
        以上需求如何实现呢?
        需要一个变量,来存储接下来创建的Student对象的id
        那么这个变量是什么变量呢?
        这个变量不可能属于对象,而且要求全局唯一,要被全体对象所共享
        那它就是静态成员变量
     */
    static int initId = 10001;

    public Student() {
        // new一次对象,count就加1
        count++;
        // initId记录着该次创建对象,它的id属性取值
        this.id = initId++;
        // 每创建一次对象,下一个对象的id就要加1
        // initId++;
    }


}